<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
  </head>
  <body>
    <script type="text/javascript">
      let p1 = new Promise((res) => {
        setTimeout(() => {
          res(111);
        }, 1000);
      });
      let p2 = new Promise((res, rej) => {
        setTimeout(() => {
          rej(2222);
        }, 3000);
      });

      let p3 = new Promise((res) => {
        setTimeout(() => {
          res(333);
        }, 2000);
      });

      // Promise.all([p1,p2,p3]).then(res=>{})

      // function myAll(arr){
      // return new Promise((resolve,reject)=>{
      // 	let resArr = [];
      // 	let count = 0;
      // 	arr.forEach(item=>{
      // 		item.then(res=>{
      // 			resArr.push(res);
      // 			// 什么时候证明结果全部收集完毕；
      // 			count++;
      // 			if(count==arr.length){
      // 				// 所有的promise对象的结果收集完毕 ；
      // 				resolve(resArr);
      // 			}
      // 		},err=>{
      // 			reject(err);
      // 		})
      // 	})

      // })

      // }

      // myAll([p1,p2,p3]).then(res=>{
      // 	console.log(res);
      // })
      // Promise.allSettled([p1,p2,p3]).then(res=>{})

      myallSettled([p1, p2, p3]).then((res) => {
        console.log(res);
      });
      function myallSettled(arr) {
        return new Promise((resolve) => {
          let count = 0;
          let resArr = new Array(arr.length); // [empty,empty,empty];

          arr.forEach((item) => {
            item.then(
              (res) => {
                // 成功

                let obj = {
                  status: "fufilled",
                  value: res,
                };
                resArr[count] = obj;
                count++;
                if (count == arr.length) {
                  resolve(resArr);
                }
              },
              (err) => {
                // 失败

                let obj = {
                  status: "reject",
                  error: err,
                };
                resArr[count] = obj;
                count++;
                if (count == arr.length) {
                  resolve(resArr);
                }
              }
            );
          });
        });
      }
    </script>
  </body>
</html>
